home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / lead.doc < prev    next >
Text File  |  2000-07-07  |  7KB  |  187 lines

  1. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  2.  
  3.                ゲームが作りたい!
  4.  
  5. ────────────────────────────────────
  6.  
  7.  
  8. ▼ ゲームが作りたい!
  9.  
  10.  
  11.   「あなたが X680x0 を買った動機は?」と聞かれた時、一番多く返ってくる答
  12. は「ゲームが作りたかったから」ではないでしょうか。では、ゲームは作りまし
  13. たか? 「はいっ!」と元気に答えた方はOK。今回の特集を参考に更に面白い
  14. ゲームを作って下さい。「うーん」と首を横に振った方は今回の特集を参考にゲー
  15. ムを作ってみて下さい。即ち X680x0 ユーザーはすべからくゲームを作るべし!
  16. 現在までで最高にゲームを作り易いマシンである X680x0 を手に入れた以上、作
  17. らなければもったいないというものでしょう! さあ!
  18.  
  19.   …と煽ったところで、「でも、作り方がわからないんですけど…」という頼り
  20. なげな答が返って来そうなのも事実。そこで今回の特集では超弾幕シューティン
  21. グ『男弾』(激光電脳倶楽部7号掲載)の作者が同ゲームの作成経験を踏まえつ
  22. つそこで得たノウハウを余すところ無く公開!というか私なんですが、既に動い
  23. ている例を参考にしつつ実際にゲームを作り上げていくことによってゲームの内
  24. 部構造や実装について解説していきたいと思います。
  25.  
  26.   なお、本稿のサンプルプログラムは配布&改造自由のフリーウェアとし、ソー
  27. スの引用&組み込みも自由とします。むしろ積極的に使って頂く事を望みます。
  28.  
  29.  
  30.  
  31.  
  32. ▼ 今回のお題は?
  33.  
  34.  
  35.   縦スクロールシューティングゲームです。筆者がシューターだから、という理
  36. 由もありますが、リアルタイムゲームの基礎となる処理が一通り入っている、プ
  37. ログラム的に比較的簡単(実は別の所が難しいのですが…後述)というところか
  38. ら題材としてこれを取り上げます。更に筆者の好みから超弾幕アイデアシューティ
  39. ングとします。そういうジャンルがあるのか不明ですが。
  40.  
  41.  
  42.  
  43. ▼ 作成環境と条件は?
  44.  
  45.  
  46.   GCC + LIBC + XSP です。C言語の習熟度としては「小物ツール位は作れるけ
  47. ども中規模以上のプログラムは書いた事がない」という程度でOK。アセンブラ
  48. は無理だけどC言語なら使えるという読者の方も多いのではないでしょうか。
  49.  
  50.   逆にアセンブラ野郎からは「えーC言語?だめじゃーん」という不満の声が上
  51. がりそうですので、ここでC言語とアセンブラ(正確にはアセンブリ言語か)の
  52. 比較をしておきましょう。
  53.  
  54.  
  55.   C言語の利点を列挙します。
  56.  
  57. 1)大きなプログラムが書きやすい
  58.  
  59.       特に変数のスコープ(有効範囲)が明確に制限できるのが利点です。
  60.     中規模以上のプログラムでありがちな「変数が不当に書き換えられてい
  61.     るのが判るのだけれどもどこで書き換えられているのか判らない」とい
  62.     う問題を比較的未然に防ぐことができます。
  63.  
  64.       また、ライブラリ関数が充実しているので1から全部書かなくて済む
  65.     というのも大きいですね。まあ今回は出来合いのライブラリはほとんど
  66.     使わないのでこれは一般論ですが。
  67.  
  68.       今回は無関係ですが、移植性の高いプログラムを書くためにも有効で
  69.     す。
  70.  
  71. 2)プログラムの可読性が高い
  72.  
  73.       非常にプリミティブな(根源的な)操作しか行えないアセンブラと比
  74.     較してC言語は人間に判り易いマクロな操作が可能です。また、1行当
  75.     たりの情報量もC言語の方が上であるため、アセンブラで何行にも渡る
  76.     処理がC言語では1行で書けたりします。
  77.  
  78.  
  79.  さて、ここで注意しなければならないのは以下の点。
  80.  
  81. %V%WC言語で書いたからといって
  82.  
  83.     %V%W大きなプログラムが書けるわけではない
  84.  
  85.  
  86. %V%WC言語で書いたからといって
  87.  
  88.     %V%Wプログラムの可読性が高まるわけではない
  89.  
  90.  
  91.   さっきと言っている事が違うやんけ!と大阪弁でツッコミが入りそうなところ
  92. ですが、まさに落とし穴なのがココ。C言語は決して銀の弾丸ではないのです。
  93. ことプログラミングに関して言えば、何にでも利く銀の弾丸など存在しないので
  94. す。
  95.  
  96.   しかし注意深く使えばC言語は有用な武器となり得ます。ただ一つ言えること
  97. は、大きなプログラム/可読性の高いプログラムを書くために必要とされる能力
  98. 及び労力がアセンブラで書いた時よりも低いということ。実感的にはアセンブラ
  99. を100とすればC言語は40といったところでしょうか。しかし40は決して0では
  100. ないのです。この事を履き違えたプログラマーによってC言語は不当に評価され
  101. てきたのではないでしょうか。(実例は挙げませんが)ダメなプログラムは大抵
  102. C言語で書かれています。ですがC言語で書いたからといってダメなプログラム
  103. というわけでは決してありません。確かにアセンブラで究極までパフォーマンス
  104. を追求したプログラムにC言語はかなわないかもしれません。しかしそれはあく
  105. までも究極の世界。実用上はC言語でも十分プログラムは書けるのです。『男弾』
  106. を見て下さい。ごく一部(ZMUSIC の呼び出しとグラフィック画面への書き込み)
  107. を除いてはオールC言語です。X68000-10MHz でもあそこまでできるのです。あ
  108. れより更に上を目指すのであればアセンブラという選択肢もありますが、あのレ
  109. ベルであればC言語で十分なのです。(実は「X68000-10MHz とC言語の現段階
  110. での上限値を提示する」というのが『男弾』の裏テーマの一つでした)
  111.  
  112.  
  113.  と、ここまでC言語を誉めたので欠点も指摘しておきましょう。
  114.  
  115.  
  116. 1)生成された実行ファイルの性能が低い
  117.  
  118.       「アセンブラで書いた方が性能が高い」という事ですがこれは上述の
  119.     通りC言語でも十分です。
  120.  
  121.  
  122. 2)コンパイルが遅い
  123.  
  124.       これはC言語の欠点というわけではないのですが…。確かに X680x0
  125.     のコンパイル速度は遅いです。アセンブラで書きたくなるのも判ります。
  126.     しかしうまく使えばこれはある程度回避できる問題です。
  127.  
  128.       それは「ファイルを分割する事」です。コンパイル→アセンブル→リ
  129.     ンクという過程において一番遅いのはやはりコンパイル。そこで1つの
  130.     C言語ソースファイルの大きさを1000行以下に納めてコンパイルします。
  131.     幸いアセンブラとリンカは高速ですのでこうすることにより比較的高速
  132.     にコンパイルが行えます。1万行のファイル1個と1000行のファイル10
  133.     個のコンパイル時間を比較すると、トータルでのコンパイル時間はほと
  134.     んど変わりませんが10個のファイル全ての再コンパイルが必要な事はそ
  135.     う多くはありません。make を使えば必要なファイルのみコンパイルす
  136.     る事ができるので大幅にコンパイル時間を少なくする事ができます。
  137.  
  138.       適切にファイルを分割する事はプログラムの可読性を高めるのにも役
  139.     立ちます。一挙両得ですね。
  140.  
  141.       もちろんコンパイラ本体を RAMDISK に置く、ディスクキャッシュを
  142.     大き目に取ってインクルードファイルやライブラリがキャッシュに乗る
  143.     ようにすると云った手段も有効です。メモリが沢山必要とされますが。
  144.     低クロック機ではコンパイラ本体に LZX を掛けないという技もありま
  145.     す。LZX の展開時間を節約するというのが目的ですが、ディスクからの
  146.     読み込み量が増えるためかえって遅くなる可能性もあります。この辺は
  147.     各自の環境で研究してみて下さい。
  148.  
  149.       更に裏技ですが indent を有効に使うという手もあります。indent 
  150.     (電脳倶楽部137号掲載)はC言語ソースリストのインデントを付け直
  151.     すツールですが、その際構文をある程度チェックして間違った場所を指
  152.     摘する機能もあります。() や {} が釣り合っていない、"" が閉じてい
  153.     ない、 else に対応する if がないなどの些細なミスは indent で発見
  154.     する事ができます。コンパイルする時間よりも indent でチェックする
  155.     時間の方が短いですから事前に indent を通せばコンパイルの回数自体
  156.     を減らす事ができます。もちろんインデントを付け直す事によって見や
  157.     すいプログラムになる利点もあります(本来はそのためのツールなので
  158.     すが)。テキストエディタによってはキー一発で indent が呼び出せる
  159.     ので有効に使って下さい。MicroEmacs なら Meta-^q です。
  160.  
  161.  
  162.   LIBC はフリーで使えるライブラリという事で採用決定。XSP に関してはスプ
  163. ライトを強力に扱えるライブラリとしてとても心強い味方です。若干扱い方が難
  164. しい所もありますが、標準の(IOCS の)スプライトライブラリもそれはそれで
  165. 扱いづらい所もありますので引き分けでしょう。総合的に見るとやはり XSP の
  166. 方に軍配が上がるでしょう。もちろん表現力においては XSP の完全勝利です。
  167.  
  168.  
  169.   X680x0 で使用できるCコンパイラにはXCとGCCがありますが、今回は速
  170. 度の要求されるシューティングゲームであるため、最適化の強力なGCCを使用
  171. します。
  172.  
  173.  
  174.  
  175. ▼ 結論
  176.  
  177.  
  178. ・超弾幕縦シューを作る!
  179.  
  180. ・C言語で書く!
  181.  
  182.  
  183.  ここまで決まった所で次項へ。
  184.  
  185.  
  186. (EOF)
  187.